/**
 * <p>Copyright:Copyright(c) 2019</p>
 * <p>Company:Professional</p>
 * <p>Package:org.cesgroup.course.proxy</p>
 * <p>File:UserInvocationHandler.java</p>
 * <p>类更新历史信息</p>
 * @todo chanlong(陈龙) 创建于 Sep 2, 2019 2:24:14 PM
 */
package org.cesgroup.course.proxy.handler;

import java.lang.reflect.Method;

import org.cesgroup.course.api.po.User;
import org.springframework.cglib.proxy.InvocationHandler;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;

/**
 * <p>描述: </p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date Sep 2, 2019 2:24:14 PM
 * @version 1.0.2019
 */
// 代理的实现
public class UserInvocationHandler implements InvocationHandler {

	// 目标对象
	private Object target;
	
	public UserInvocationHandler(Object target) {
		this.target = target;
	}
	
	/**
	 * @see org.springframework.cglib.proxy.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
	 * @author chanlong(陈龙)
	 * @date Sep 2, 2019 2:24:14 PM
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		/* 目标对象的方法调用前，对业务逻辑进行增加 */
		
		// 对前台传递的密码明文进行加密，若密码为空则使用默认密码
		User user = (User)args[0];
		String password = user.getPassword();
		user.setPassword(MD5.create().digestHex(StrUtil.isEmpty(password) ? "000000" : password));
		
		// 调用目标对象的方法
		Object result = method.invoke(target, args);
		
		/* 目标对象的方法调用后，对业务逻辑进行增加 */
		
		return result;
	}
}
